package com.rxst.msg.utils;

import cn.hutool.core.util.StrUtil;
import com.rxst.msg.sso.entity.UserContext;

import java.util.HashMap;
import java.util.Map;

/**
 * @author ：唐建军
 * @date ：2021/8/19 17:57
 * @description：定义全局token对象
 * @modified By：
 * @version: $
 */
public class TokenUtils {

    public static Map<String, UserContext> MAP_TOKEN = new HashMap<>();
    public static Map<String, String> USER_TOKEN = new HashMap<>();
    public static String UPLOAD_TOKEN = "44q8ztnd2fef1f9b1e844a2ba7d3f20cc331eda502hq5m3oa6832ecfd85548b3a6dc88eca42be994";

    /**
     * 验证该token是否在全局list中
     *
     * @param token 登录标识
     * @return token
     */
    public static boolean checkToken(String token) {
        return MAP_TOKEN.containsKey(token);
    }

    /**
     * 全局存放token信息
     *
     * @param userContext 用户信息
     */
    public static void setToken(UserContext userContext) {
        if (!MAP_TOKEN.containsKey(userContext.getToken())) {
            MAP_TOKEN.put(userContext.getToken(), userContext);
        }
        USER_TOKEN.put(userContext.getCurrentUserId() + userContext.getRandom(), userContext.getToken());
    }

    /**
     * 全局存放token信息
     *
     * @param token 登录标识
     */
    public static UserContext getUserContext(String token) {
        return MAP_TOKEN.get(token);
    }

    /**
     * 全局存放token信息
     *
     * @param token 登录标识
     */
    public static void removeToken(String token) {
        if (MAP_TOKEN.containsKey(token) && !StrUtil.equals(token, UPLOAD_TOKEN)) {
            UserContext userContext = MAP_TOKEN.get(token);
            USER_TOKEN.remove(userContext.getCurrentUserId() + userContext.getRandom());
            MAP_TOKEN.remove(token);
        }
    }

    /**
     * 全局存放token信息
     *
     * @param userId 用户ID
     */
    public static void removeUser(String userId) {
        if (StrUtil.isNotBlank(userId) && USER_TOKEN.containsKey(userId)) {
            String token = USER_TOKEN.get(userId);
            if (!StrUtil.equals(UPLOAD_TOKEN, token)) {
                MAP_TOKEN.remove(token);
                USER_TOKEN.remove(userId);
            }
        }
    }
}